package com.hahaliu.hahaliu.service.video;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hahaliu.hahaliu.pojo.vo.VideoInfoVO;

import javax.annotation.Nullable;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
* @author Liubuzhu
* @description 针对表【video】的数据库操作Service
* @createDate 2024-05-18 14:50:03
*/
public interface VideoService {

	/**
	 * 获取游客推荐视频列表 11条随机数据
	 * @return
	 */
	List<VideoInfoVO> listWithUser();

	/**>

	/**
	 * 根据ID获取视频辛信息
	 * @param vId
	 * @return
	 */
	VideoInfoVO getInfo(Integer vId);

	/**
	 * 标题模糊查询
	 * @param name
	 * @return
	 */
	IPage<VideoInfoVO> searchByNameLike(String name, Integer page, Integer quantity);

	/**
	 * 推荐视频
	 * @return
	 */
	List<VideoInfoVO> getRecommend();

	/**
	 * 获取所有VIds
	 * @return
	 */
	List<Integer> getVIds();

	/**
	 * 分页查询
	 * @param status
	 * @param page
	 * @param quantity
	 * @return
	 */
	IPage<VideoInfoVO> selectUserPage(Integer status, Integer page, Integer quantity);

	/**
	 * 更新视频状态，包括过审、不通过、删除，其中审核相关需要管理员权限，删除可以是管理员或者投稿用户
	 * @param vid   视频ID
	 * @param status 要修改的状态，1通过 2不通过 3删除
	 */
	void updateVideoStatus(Integer vid, Integer status);

	/**
	 * 根据fids获取视频信息
	 * @param idList 要查询的视频id列表
	 * @param column 根据什么排序
	 * @param page 分页页码
	 * @param quantity 每一页查询的数量
	 * @return 用户信息、分区信息、视频信息列表
	 */
	List<Map<String, Object>> getVideosWithDataByIdsOrderByDesc(List<Integer> idList, @Nullable String column, Integer page, Integer quantity);

	/**
	 * 获取用户投稿的视频数量
	 * @param uid 用户ID
	 * @return 投稿的视频数量
	 */
	Long getWorksCount(Integer uid);

	/**
	 * 根据vid查询单个视频信息，包含用户信息和分区信息
	 * @param vid 视频ID
	 * @return 包含用户信息、分区信息、视频信息的map
	 */
	VideoInfoVO getVideoWithDataById(Integer vid);

	/**
	 * 根据id分页获取视频信息，包括用户和分区信息
	 * @param set   要查询的视频id集合
	 * @param index 分页页码 为空默认是1
	 * @param quantity  每一页查询的数量 为空默认是10
	 * @return  包含用户信息、分区信息、视频信息的map列表
	 */
	List<Map<String, Object>> getVideosWithDataByIds(Set<Object> set, Integer index, Integer quantity);


}
